package com.cuz.daileetcode;

import com.cuz.daileetcode.utils.ListNode;
import com.cuz.daileetcode.utils.ListNodeUtils;
import com.sun.istack.internal.NotNull;

/**
 * @author cuzz
 * @version 1.0
 * @description: 206. 反转链表
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * <p>
 * 输入：head = [1,2,3,4,5]
 * 输出：[5,4,3,2,1]
 * 示例 2：
 * <p>
 * <p>
 * 输入：head = [1,2]
 * 输出：[2,1]
 * 示例 3：
 * <p>
 * 输入：head = []
 * 输出：[]
 * <p>
 * <p>
 * 提示：
 * <p>
 * 链表中节点的数目范围是 [0, 5000]
 * -5000 <= Node.val <= 5000
 * @date 21:30 2021/9/28
 **/
public class Day11 {
    static class S1 {
        public static void main(String[] args) {
            ListNode head = ListNodeUtils.listGenerate(1, 2, 3, 4);
            ListNode newHead = reverseList(head);
            ListNodeUtils.printList(newHead);
        }
        public static ListNode reverseList(ListNode head) {
            if(head==null||head.next==null){
                return head;
            }
            ListNode cur=head;
            ListNode pre=head.next;
            boolean isFirst=true;
           while (pre!=null){
               ListNode temp=pre.next;
               pre.next=cur;
               if (isFirst){
                   cur.next=null;
                   isFirst=false;
               }
               cur=pre;
               pre=temp;

           }
           return cur;
        }
    }
}
